// 网络请求库
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 创建一个新的axios函数对象
const ajax = axios.create({
  baseURL: 'http://123.57.109.30:8000' // 配置基地址 - 线上接口
  // baseURL: 'http://localhost:8080' // 配置基地址 - 本地服务器未配置不用
})

export default ({ url, method = 'GET', data, params, headers }) => {
  return ajax({
    url,
    method,
    data,
    params,
    headers
  })
  //   $.ajax({
  //     url,
  //     type: method,
  //     data,
  //     header: headers
  //   })
}

// 添加请求拦截器
ajax.interceptors.request.use(function (config) {
  // 在发送请求之前做些什么
  // 添加token
  if (config.headers.Authorization === undefined && store.state.token.length > 0) {
    config.headers.Authorization = 'Bearer ' + store.state.token
  }
  return config
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 添加响应拦截器
ajax.interceptors.response.use(function (response) {
  // 对响应数据做点什么
  return response
}, function (error) {
  // 对响应错误做点什么
  // 判断用户token是否过期.过期就调转到登录页面并清空之前的token\ 状态码- 401 -----token过期
  // console.dir(error)
  if (error.response.status === 401) {
    store.commit('setToken', '')
    router.replace({
      path: '/login'
    })
  }
  return Promise.reject(error)
})
// 外面在逻辑页面使用的时候
/*
import reqeust from '@/utils/request' // reqeust变量就是ajax请求函数
reqeust({
    url: '请求地址',
    method: '请求方式',
    data: {参数名: 值},
    params: {参数名: 值},
    headers: {请求头名: 值}
})
*/
// 优化(经验): 以后扩展
// 万一以后axios过时了, 想要换一个请求库, $.ajax()
// 如何替换: 把request.js 替换一个方法导出
// 外面传入的是axios使用的配置项5个
// $.ajax配置项要url, type, data, headers...
// axios用method, $.ajax用的是type
// 问题1: 逻辑页面传入配置项对不上
// 解决: 导出一个自定义函数
